package com.dzxy.dao;


import com.dzxy.bean.UserBean;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.*;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 进行jdbc连接数据库的测试工作
 * 使用main方法先行测试jdbc对于数据库操作
 */
public class DBTestDriver {
    public static void main(String[] args) {
        doQuryByDBUtils();
    }

    /**
     * 使用dbutils进行新增操作
     */
    public static void insertNewData() {
        // 新增执行的sql语句
        String strSql = "INSERT INTO userinfo(userName,userPsw) VALUES( ?, ?)";
        // 创建参数数组
        Object[] objParams = {"user88", "user88"};
        // 执行新增操作语句
        // int i = DBProvider.update(strSql, objParams);
        int i = DBProvider.update(strSql, "user88", "user88");
        // 判断操作结果
        if (i == 1) {
            System.out.println("新增数据成功！");
        } else {
            System.out.println("新增数据失败！");
        }
    }

    /**
     * 使用DBUtils进行数据库查询操作
     */
    public static void doQuryByDBUtilsBean2() {
        System.out.println("========================jdbc连接数据库操作============================");

        // （4）执行SQL语句，获取数据操作结果或者结果集对象ResultSet；
        String strSql = "SELECT * FROM userinfo"; // sql语句先进行调试，在写入java程序
        // 获取查询结果

        // 转储为 list+bean
        List<UserBean> list = DBProvider.query(strSql, new BeanListHandler<>(UserBean.class));

        // 转储为 list+map
        List<Map<String, Object>> listMap = DBProvider.query(strSql, new MapListHandler());

        // 转储为 list+Array
        List<Object[]> lsitArray = DBProvider.query(strSql, new ArrayListHandler());

        // 业务逻辑处理：进行结果集的遍历
        for (UserBean eachBean : list) {
            // 从list中的bean对象中获取数据库查询结果集中的各列的值
            //System.out.print(eachBean.getUserId()+"   "+eachBean.getUserName()+"    "+eachBean.getUserPsw());
            System.out.print("   " + eachBean.getUserName());
            // 换行
            System.out.println();
        }

    }

    /**
     * 使用DBUtils进行数据库查询操作
     */
    public static void doQuryByDBUtilsBean() {
        System.out.println("========================jdbc连接数据库操作============================");

        // （4）执行SQL语句，获取数据操作结果或者结果集对象ResultSet；
        String strSql = "SELECT * FROM userinfo"; // sql语句先进行调试，在写入java程序
        // 获取查询结果
        QueryRunner runner = new QueryRunner(DBCPDataSource.getDataSource());

        try {
            // 转储为 list+bean
            List<UserBean> list = runner.query(strSql, new BeanListHandler<>(UserBean.class));

            // 转储为 list+map
            List<Map<String, Object>> listMap = runner.query(strSql, new MapListHandler());

            // 转储为 list+Array
            List<Object[]> lsitArray = runner.query(strSql, new ArrayListHandler());

            // 业务逻辑处理：进行结果集的遍历
            for (UserBean eachBean : list) {
                // 从list中的bean对象中获取数据库查询结果集中的各列的值
                //System.out.print(eachBean.getUserId()+"   "+eachBean.getUserName()+"    "+eachBean.getUserPsw());
                System.out.print("   " + eachBean.getUserName());
                // 换行
                System.out.println();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }


    }

    /**
     * 使用DBUtils进行数据库查询操作
     */
    public static void doQuryByDBUtils() {
        System.out.println("========================jdbc连接数据库操作============================");

        // （4）执行SQL语句，获取数据操作结果或者结果集对象ResultSet；
        String strSql = "SELECT * FROM userinfo"; // sql语句先进行调试，在写入java程序
        // 获取查询结果
        QueryRunner runner = new QueryRunner(DBCPDataSource.getDataSource());

        try {
            List<Map<String, Object>> list = runner.query(strSql, new MapListHandler());

            // 业务逻辑处理：进行结果集的遍历
            for (Map<String, Object> mapEachRow : list) {
                // 获取Entry结果集
                Set<Map.Entry<String, Object>> setEn = mapEachRow.entrySet();
                // 遍历每一行的map
                for (Map.Entry en : setEn) {
                    // 打印字段名和字段值
                    System.out.print("    " + en.getValue());
                }
                // 换行
                System.out.println();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}